package controller

import (
	"TTMS/dao"
	"TTMS/model"
	"html/template"
	"net/http"
	"strconv"
)

// IndexHandler 去首页
func IndexHandler(w http.ResponseWriter, r *http.Request) {
	//判断是否已经登录
	sess, flag := dao.IsLogin(r)
	//通过 State 对电影进行分类
	films1, films2, _ := dao.ClassifyFilmByState()
	//获取票房榜单
	film3, _ := dao.SortFilmByTicketOffice()
	//获取销量榜单
	film4, _ := dao.SortFilmBySales()
	page := model.Page{
		ShowingFilms1:          films1[:4],
		ShowingFilms2:          films1[4:8],
		UpcomingFilms1:         films2[:4],
		UpcomingFilms2:         films2[4:8],
		ShowingFilmsNum:        len(films1),
		UpcomingFilmsNum:       len(films2),
		IsLogin:                flag,
		SortFilmByTicketOffice: film3[:5],
		SortFilmBySales:        film4[:5],
	}
	if flag {
		page.User = sess.User
	}
	//解析模版
	t := template.Must(template.ParseFiles("views/index.html"))
	//执行
	t.Execute(w, page)
}

// ShowFilms 按分类显示所有的电影
func ShowFilms(w http.ResponseWriter, r *http.Request) {
	//判断是否已经登录
	sess, flag := dao.IsLogin(r)
	//获取电影状态
	filmState := r.FormValue("filmState")
	state := 0
	if filmState == "即将上映" {
		state = 1
	}
	//获取电影的类型
	filmType := r.FormValue("filmType")
	//获取电影的区域
	zone := r.FormValue("zone")
	//通过 State、FilmType、Zone 对电影进行筛选
	films, _ := dao.ClassifyFilms(state, filmType, zone)
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/film/film_show.html"))
	//执行
	var classify *model.Classify
	classify = classify.NewClassify(films, filmState, filmType, zone, flag)
	if flag {
		classify.User = sess.User
	}
	t.Execute(w, classify)
}

// FilmManage 管理电影
func FilmManage(w http.ResponseWriter, r *http.Request) {
	//判断是否登录
	sess, _ := dao.IsLogin(r)
	//获取所有电影
	films, _ := dao.GetFilms()
	sess.Films = films
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/manager/film_manage.html"))
	//执行
	t.Execute(w, sess)
}

// ToUpdateOrAddFilmPage 去更新或添加图书的页面
func ToUpdateOrAddFilmPage(w http.ResponseWriter, r *http.Request) {
	//获取电影名称
	filmName := r.FormValue("filmName")
	//通过电影名称查询电影
	film := dao.CheckFilmByName(filmName)
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/manager/film_edit.html"))
	if film.ID > 0 {
		//该电影已存在
		//去更新电影
		//执行
		t.Execute(w, film)
	} else {
		//电影不存在
		//去添加电影
		//执行
		t.Execute(w, "")
	}
}

// SaveFilm 添加或修改电影
func SaveFilm(w http.ResponseWriter, r *http.Request) {
	film := &model.Film{}
	//获取电影信息
	film.FilmName = r.PostFormValue("filmName")
	film.FilmType = r.PostFormValue("filmType")
	film.Duration, _ = strconv.ParseInt(r.PostFormValue("duration"), 10, 0)
	film.Price, _ = strconv.ParseFloat(r.PostFormValue("price"), 64)
	film.Sales, _ = strconv.ParseInt(r.PostFormValue("sales"), 10, 0)
	film.TicketOffice, _ = strconv.ParseFloat(r.PostFormValue("ticketOffice"), 64)
	film.Zone = r.PostFormValue("zone")
	film.State, _ = strconv.ParseInt(r.PostFormValue("state"), 10, 0)
	film.ScreenDate = r.PostFormValue("screenDate")
	film.OfflineDate = r.PostFormValue("offlineDate")
	//查看是否存在该电影
	film0 := dao.CheckFilmByName(film.FilmName)
	if film0.ID > 0 {
		//该电影已存在
		//修改电影信息
		dao.UpdateFilm(film)
	} else {
		//该电影不存在
		//添加该电影
		film.ImgPath = "/static/img/11.jpg"
		dao.AddFilm(film)
	}
	//前往电影管理页面
	FilmManage(w, r)
}

// DeleteFilm 删除电影
func DeleteFilm(w http.ResponseWriter, r *http.Request) {
	//获取电影名称
	filmName := r.FormValue("filmName")
	//根据电影名称删除电影
	dao.DeleteFilm(filmName)
	//刷新电影管理界面
	FilmManage(w, r)
}

// FilmPage 电影详情页面
func FilmPage(w http.ResponseWriter, r *http.Request) {
	//判断是否登录
	sess, flag := dao.IsLogin(r)
	if !flag {
		sess = &model.Session{}
	}
	sess.IsLogin = flag
	//获取电影名称
	filmName := r.FormValue("filmName")
	//通过电影名称获取电影
	sess.NowFilm = dao.CheckFilmByName(filmName)
	//根据电影名称获取电影评论
	sess.Messages, _ = dao.SelectMessageByTime(filmName)
	//获取收件人的ID
	sess.ReceivedID, _ = strconv.ParseInt(r.FormValue("receivedID"), 10, 0)
	if len(sess.Messages) > 15 {
		sess.Messages = sess.Messages[:15]
	}
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/film/film.html"))
	//执行
	t.Execute(w, sess)
}

// SelectFilm 关键词查找电影
func SelectFilm(w http.ResponseWriter, r *http.Request) {
	//判断是否登录
	sess, flag := dao.IsLogin(r)
	if !flag {
		sess = &model.Session{}
	}
	sess.IsLogin = flag
	//获取电影名称
	filmName := r.FormValue("filmName")
	//通过关键字进行模糊查找
	sess.Films, _ = dao.FuzzySearch(filmName)
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/film/select_film.html"))
	//执行
	t.Execute(w, sess)
}

// FilmList 电影榜单
func FilmList(w http.ResponseWriter, r *http.Request) {
	//判断是否登录
	sess, flag := dao.IsLogin(r)
	if !flag {
		sess = &model.Session{}
	}
	sess.IsLogin = flag
	//获取排序条件
	condition := r.FormValue("listCondition")
	if condition == "" || condition == "票房榜单" {
		sess.ListCondition = "票房榜单"
		sess.Films, _ = dao.SortFilmByTicketOffice()
		sess.Films = sess.Films[:10]
	} else if condition == "销量榜单" {
		sess.ListCondition = "销量榜单"
		sess.Films, _ = dao.SortFilmBySales()
		sess.Films = sess.Films[:10]
	}
	//解析模版
	t := template.Must(template.ParseFiles("views/pages/film/film_list.html"))
	//执行
	t.Execute(w, sess)
}
